package IO;/*
 *
 * @author 陈粒        Student s1 = new Student("小龙女", 23);
        Student s2 = new Student("任盈盈", 24);
        Student s3 = new Student("小龙女", 23);
        Student s4 = new Student("东方不败", 25);
        Student s5 = new Student("伊琳", 29);
        Student s6 = new Student("周芷若", 30);
        HashSet<Student> hashSet = new HashSet<>();
        hashSet.add(s1);
        hashSet.add(s2);
        hashSet.add(s3);
        hashSet.add(s4);
        hashSet.add(s5);
        hashSet.add(s6);
        for (Student student : hashSet) {
            System.out.println(student.getName()+"=="+student.getAge());
        }
    }


 * @version 创建时间：2021/7/16 15:44
 */
/**
 * InputStreamReader OutputStreamWriter
 * 字节流到字符流的转换
 * 转换流的特点：
 * 1. 其是字符流和字节流之间的桥梁
 *
 * 2. 可对读取到的字节数据经过"指定编码"转换成字符
 *
 * 3. 可对读取到的字符数据经过"指定编码"转换成字节
 * 具体的对象体现：
 * 1. InputStreamReader:字节到字符的桥梁
 *
 * 2. OutputStreamWriter:字符到字节的桥梁
 * 这两个流对象是字符体系中的成员，它们有转换作用，
 * 本身又是字符流，所以在构造的时候需要传入字节流对象进来。
 * 用途：指定输入、输出流的编码、
 * 注意：编辑与打开时需要保证编码的一致，不一致就乱码
 * 如果想要解决流乱码的问题，可以使用编码转换流给流进行编码的设置
 */

import org.junit.Test;

import java.io.*;

public class Input_Output_Stream_Reader_Writer {
    @Test
    public void testinput_outputStream_reader_writer() {
        File oldfile = new File("C:\\Users\\tarena\\Desktop\\file\\file1.txt");
        File newfile = new File("C:\\Users\\tarena\\Desktop\\file\\file2.txt");
        copyfile(oldfile, newfile);
    }

    public void copyfile(File oldfile, File newfile) {
        InputStream is = null;
        BufferedReader br=null;
        OutputStream os = null;
        BufferedWriter bw=null;
        try {
            br=new BufferedReader(new InputStreamReader(new FileInputStream(oldfile)));//高效的方式,在外层多调用一个BufferedReader方法
            /**
             * 低效的方式
             fis = new FileInputStream(oldfile);//给字节流对象赋值
             isr = new InputStreamReader(fis);//传入字节流，字节到字符
             */
            bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newfile)));//高效的方式，在外层多调用一个BufferedWriter方法
            /**
             * 低效的方式
             fos = new FileOutputStream(newfile);////给字节流对象赋值
             osw = new OutputStreamWriter(fos);//传入字节流，字符到字节
             */
            int i = 0;
            while ((i = br.read()) != -1) {
                bw.write(i);
            }
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}